home *** CD-ROM | disk | FTP | other *** search
/ PC World Komputer 2010 April / PCWorld0410.iso / redakcyjne / programy / Tlen 6.0.1.12 pl / tleninst60112.exe / sdk / Plugin_src / menu-vc / demoplugin.cpp < prev    next >
C/C++ Source or Header  |  2006-09-18  |  8KB  |  269 lines

  1. #include "stdafx.h"
  2.  
  3. #include <stdlib.h>
  4. #include <stdio.h>
  5. #include <windows.h>
  6.  
  7. #include "../../TlenSources/plugin/plugin_struct.h"
  8. #include "../../TlenSources/plugin/plugin_menu.h"
  9. #include "../../TlenSources/plugin/plugin_procaddr.h"
  10. #include "../../TlenSources/plugin/sl_struct.h"
  11. #include "../../TlenSources/plugin/cl_struct.h"
  12.  
  13. #include "AggressiveOptimize.h"
  14.  
  15. //Tymczasowe definicje, bΩdzie oddzielny plik nag│≤wkowy
  16. #define PROTOCOL_ID_TLEN               "TLEN"
  17. #define PROTOCOL_ID_GG                 "GG"
  18. #define PROTOCOL_ID_SMS                "SMS"
  19. #define PROTOCOL_ID_GROUP              "GRP"
  20.  
  21. HINSTANCE hInst;
  22. TLENPLUGINFUNCTIONS *tlen_functions;
  23. sl_add_type sl_add;
  24. HANDLE menuitem1, menuitem2;
  25.  
  26. #define TEST_MENU_ITEM_1    "MenuPlugin/TestItem1"
  27. #define TEST_MENU_ITEM_2    "MenuPlugin/TestItem2"
  28. #define TEST_MENU_ITEM_3    "MenuPlugin/TestItem3"
  29. #define TEST_MENU_ITEM_4    "MenuPlugin/TestItem4"
  30. #define TEST_MENU_ITEM_5    "MenuPlugin/TestItem5"
  31. #define TEST_MENU_ITEM_6    "MenuPlugin/TestItem6"
  32.  
  33. TLENPLUGININFO pluginInfo={
  34.     sizeof(TLENPLUGININFO),
  35.     "Wykorzystanie menu - VC++",
  36.     PLUGIN_API_VERSION,
  37.     MAKE_DWORD_VERSION(1,0,0,0),
  38.     "Plugin pokazuje funkcje menu - dodawanie pozycji, kasowanie, szukanie, zmianΩ parametr≤w, dodawanie funkcji callback do menu, etc.",
  39.     "Prawa autorskie",
  40.     "Producent",
  41.     "E@mail",
  42.     "http://www",
  43.     0,        
  44.     0,        
  45.     0,        
  46.     0        
  47. };
  48.  
  49. extern "C" __declspec(dllexport) TLENPLUGININFO* GetPluginInfo(DWORD TlenVersion);
  50. extern "C" __declspec(dllexport) int LoadPlugin(TLENPLUGINFUNCTIONS *tlen_functions);
  51. extern "C" __declspec(dllexport) int UnloadPlugin(void);
  52.  
  53.  
  54. BOOL WINAPI DllMain(HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpvReserved)
  55. {
  56.     hInst=hinstDLL;
  57.     return TRUE;
  58. }
  59.  
  60. __declspec(dllexport) TLENPLUGININFO* GetPluginInfo(DWORD tlenVersion)
  61. {
  62.     return &pluginInfo;
  63. }
  64.  
  65. static int MenuItemEvent(WPARAM wParam, LPARAM lParam)
  66. {
  67.     //Znajdziemy i usuniemy pozycje "Powiadom znajomego" w menu glownym
  68.     TlenMenuItemDefinition mi;
  69.     InitializeStruct(mi);
  70.  
  71.     mi.Flags = TMIS_ITEMID;
  72.     mi.Item_ID = MI_MAIN_NOTIFYFRIEND;
  73.     
  74.     TlenMenuItemDefinition *item = (TlenMenuItemDefinition *) tlen_functions->CallTlenFunction(hInst, TLEN_FIND_MENU_ITEM, (WPARAM) &mi, NULL); 
  75.  
  76.     if (item)
  77.     {
  78.      if (tlen_functions->CallTlenFunction(hInst, TLEN_DELETE_MENU_ITEM, (WPARAM) item->ItemHandle, NULL) == 0)
  79.      {
  80.         //szukan╣ pozycjΩ usuniΩto
  81.         MessageBox(NULL, "Pozycja usuniΩta", "OK", MB_OK);
  82.  
  83.         //zmienimy teraz nasz╣ pierwsz╣ pozycjΩ
  84.         InitializeStruct(mi);
  85.  
  86.         mi.Flags = TMIM_CAPTION | TMIM_FLAGS;
  87.         mi.Caption = "PozycjΩ usuniΩto poprawnie";
  88.         mi.Flags |= TMI_GRAYED | TMI_CHECKED;
  89.      
  90.         tlen_functions->CallTlenFunction(hInst, TLEN_CHANGE_MENU_ITEM, (WPARAM) menuitem1, (LPARAM) &mi);
  91.      }
  92.      else
  93.      {
  94.         MessageBox(NULL, "Nie uda│o siΩ usun╣µ pozycji", "B│╣d", MB_OK);
  95.      }
  96.     }
  97.     else
  98.     {
  99.         MessageBox(NULL, "Nie uda│o siΩ odnaleƒµ pozycji", "B│╣d", MB_OK);
  100.     }
  101.     
  102.  
  103.     return 0;
  104. }
  105.  
  106. static int MenuItem2Event(WPARAM wParam, LPARAM lParam)
  107. {
  108.     TlenMenuItemDefinition *item = (TlenMenuItemDefinition *) wParam;
  109.     MenuPopupInfo *info = (MenuPopupInfo *) lParam;
  110.  
  111.     //Wy£wietlimy informacjΩ o zaznaczonych na li£cie kontaktach (kontakcie)
  112.     static char text[8192];
  113.  
  114.     sprintf(text, "MenuID: %s\nLocationID: %s\nItemID: %s\n\nContacts (%d):\n", info->Menu_ID, info->Location_ID,
  115.     item->Item_ID, info->Contacts.count);
  116.  
  117.     for (int i = 0; i < info->Contacts.count; i++)
  118.     {
  119.      strcat(text, info->Contacts.contacts[i].ContactID);
  120.      strcat(text, " ");
  121.      strcat(text, info->Contacts.contacts[i].ProtocolID);
  122.      strcat(text, "\n");
  123.     }
  124.  
  125.     MessageBox(NULL, text, "Informacje", MB_OK);
  126.  
  127.     return 0;
  128. }
  129.  
  130. static int MenuEvent(WPARAM wParam, LPARAM lParam)
  131. {
  132.  //Tu┐ przed wy£wietleniem menu wska┐emy pozycje, kt≤re chcemy pokazaµ
  133.  if (wParam == TLEN_MENU_CALLBACK_BEFORE_POPUP)
  134.  {
  135.   MenuPopupInfo *info = (MenuPopupInfo *) lParam;
  136.  
  137.   //T╣ pozycjΩ poka┐emy tylko przy kontaktach tlenowych
  138.   if (info->Contacts.count && strcmp(info->Contacts.contacts[0].ProtocolID, PROTOCOL_ID_TLEN) == 0)
  139.   {
  140.    sl_add(&(info->MenuItemsToShow), TEST_MENU_ITEM_1);
  141.   }
  142.  
  143.   //A te przy wszystkich
  144.   sl_add(&(info->MenuItemsToShow), TEST_MENU_ITEM_2);
  145.   sl_add(&(info->MenuItemsToShow), TEST_MENU_ITEM_3);
  146.   sl_add(&(info->MenuItemsToShow), TEST_MENU_ITEM_4);
  147.   sl_add(&(info->MenuItemsToShow), TEST_MENU_ITEM_5);
  148.   sl_add(&(info->MenuItemsToShow), TEST_MENU_ITEM_6);
  149.  
  150.  
  151.   //W zale┐no£ci od tego ile jest zaznaczonych kontakt≤w zmienimy napis pozycji menu
  152.     TlenMenuItemDefinition mi;
  153.     InitializeStruct(mi);
  154.  
  155.         mi.Flags = TMIM_CAPTION;
  156.  
  157.         char t1[] = "Poka┐ informacje o kontakcie";
  158.         char t2[] = "Poka┐ informacje o kontaktach";
  159.  
  160.     if (info->Contacts.count > 1)
  161.     {
  162.         mi.Caption = t2;
  163.     }
  164.     else
  165.     {
  166.         mi.Caption = t1;
  167.     }
  168.     
  169.     tlen_functions->CallTlenFunction(hInst, TLEN_CHANGE_MENU_ITEM, (WPARAM) menuitem2, (LPARAM) &mi);
  170.     
  171.   return 1;
  172.  }
  173.  
  174.  return 0;
  175. }
  176.  
  177. __declspec(dllexport) int LoadPlugin(TLENPLUGINFUNCTIONS *functions)
  178. {
  179.     tlen_functions = functions;
  180.  
  181.     sl_add = (sl_add_type) tlen_functions->CallTlenFunction(hInst, TLEN_GET_PROC_ADDRESS, TPA_SL_ADD, NULL);
  182.     
  183.     TlenMenuItemDefinition mi;
  184.     InitializeStruct(mi);
  185.  
  186.     HBITMAP icon = (HBITMAP) LoadImage(hInst, MAKEINTRESOURCE(101),IMAGE_BITMAP, 16, 16, NULL);
  187.  
  188.     //Dodajemy po kolei wszystkie pozycje menu
  189.     mi.Item_ID = TEST_MENU_ITEM_1;
  190.     mi.Caption = "Usuwa \"Powiadom znajomego\"";
  191.     mi.Menu_ID = TLEN_MENUID_CL_ELEMENT;
  192.     mi.ModuleHandle = hInst;
  193.     mi.CallBack = MenuItemEvent;
  194.     mi.Position = 500000;
  195.     mi.Icon.Bitmap = icon;
  196.     mi.Icon.Transparent = RGB(0xBC, 0xD5, 0xE7);
  197.     mi.HotKey = MAKEWORD(70, (BYTE) MOD_CONTROL);
  198.  
  199.     menuitem1 = (HANDLE) tlen_functions->CallTlenFunction(hInst, TLEN_ADD_MENU_ITEM, (WPARAM) &mi, NULL); 
  200.  
  201.     InitializeStruct(mi);
  202.  
  203.     mi.Item_ID = TEST_MENU_ITEM_2;
  204.     mi.Menu_ID = TLEN_MENUID_CL_ELEMENT;
  205.     mi.ModuleHandle = hInst;
  206.     mi.CallBack = MenuItem2Event;
  207.     mi.Position = -500000;
  208.  
  209.     menuitem2 = (HANDLE) tlen_functions->CallTlenFunction(hInst, TLEN_ADD_MENU_ITEM, (WPARAM) &mi, NULL); 
  210.     
  211.     InitializeStruct(mi);
  212.  
  213.     mi.Item_ID = TEST_MENU_ITEM_3;
  214.     mi.Menu_ID = TLEN_MENUID_CL_ELEMENT;
  215.     mi.Caption = "Rozwijane menu";
  216.     mi.ModuleHandle = hInst;
  217.     mi.Position = 500100;
  218.  
  219.     tlen_functions->CallTlenFunction(hInst, TLEN_ADD_MENU_ITEM, (WPARAM) &mi, NULL); 
  220.  
  221.     InitializeStruct(mi);
  222.  
  223.     mi.Item_ID = TEST_MENU_ITEM_4;
  224.     mi.Menu_ID = TLEN_MENUID_CL_ELEMENT;
  225.     mi.Parent_ID = TEST_MENU_ITEM_3;
  226.     mi.Caption = "Pozycja 1";
  227.     mi.ModuleHandle = hInst;
  228.     mi.Position = 100;
  229.  
  230.     tlen_functions->CallTlenFunction(hInst, TLEN_ADD_MENU_ITEM, (WPARAM) &mi, NULL); 
  231.  
  232.     InitializeStruct(mi);
  233.  
  234.     mi.Item_ID = TEST_MENU_ITEM_5;
  235.     mi.Menu_ID = TLEN_MENUID_CL_ELEMENT;
  236.     mi.Parent_ID = TEST_MENU_ITEM_3;
  237.     mi.Caption = "Pozycja 2";
  238.     mi.ModuleHandle = hInst;
  239.     mi.Position = 10100;
  240.  
  241.     tlen_functions->CallTlenFunction(hInst, TLEN_ADD_MENU_ITEM, (WPARAM) &mi, NULL); 
  242.  
  243.     InitializeStruct(mi);
  244.  
  245.     mi.Item_ID = TEST_MENU_ITEM_6;
  246.     mi.Menu_ID = TLEN_MENUID_CL_ELEMENT;
  247.     mi.Parent_ID = TEST_MENU_ITEM_3;
  248.     mi.Caption = "Pozycja 3";
  249.     mi.ModuleHandle = hInst;
  250.     mi.Position = 10200;
  251.  
  252.     tlen_functions->CallTlenFunction(hInst, TLEN_ADD_MENU_ITEM, (WPARAM) &mi, NULL); 
  253.  
  254.     //Dodajemy callback do menu listy kontaktow
  255.     tlen_functions->CallTlenFunction(hInst, TLEN_ADD_MENU_CALLBACK, (WPARAM) TLEN_MENUID_CL_ELEMENT, (LPARAM) MenuEvent); 
  256.  
  257.     DeleteObject(icon);
  258.  
  259.     return 0;
  260. }
  261.  
  262. __declspec(dllexport) int UnloadPlugin(void)
  263. {
  264.     //Usuwamy callback menu listy kontakt≤w - je£li tego nie zrobimy po wy│adowaniu pluginu i pr≤bie pokazania menu mamy gwarantowany access violation
  265.     tlen_functions->CallTlenFunction(hInst, TLEN_REMOVE_MENU_CALLBACK, (WPARAM) TLEN_MENUID_CL_ELEMENT, (LPARAM) MenuEvent); 
  266.  
  267.     return 0;
  268. }
  269.